import type { ConfigEnv, UserConfig } from "vite" // 引入 Vite 配置类型
import { loadEnv } from 'vite' // 用于加载环境变量
import vue from '@vitejs/plugin-vue' // 引入 Vue 插件，支持 Vue 3 项目
import { resolve } from 'path' // 用于路径解析

// 自定义路径解析函数，简化路径处理
const pathResolve = (dir: string): string => {
    return resolve(__dirname, dir) // 解析传入的相对路径为绝对路径
}

// Vite 配置函数
const viteConfig = ({ mode }: ConfigEnv): UserConfig => {
    // 加载环境变量，`mode` 由 Vite 自动传入，表示当前的构建模式（development 或 production）
    const { VITE_PORT, VITE_OPEN, VITE_BASE_PATH, VITE_OUT_DIR } = loadEnv(mode, process.cwd())

    // 配置路径别名，方便在代码中简洁地引用文件
    const alias: Record<string, string> = {
        '@': pathResolve('src'), // `@` 指向 `src` 目录
        assets: pathResolve('src/assets'), // `assets` 指向 `src/assets` 目录
    }

    // 返回 Vite 配置对象
    return {
        plugins: [
            vue(), // Vue 插件，处理 `.vue` 文件
        ],
        root: process.cwd(), // 设置项目根目录为当前工作目录
        base: VITE_BASE_PATH, // 配置公共基础路径，用于部署时设置不同的路径
        resolve: {
            alias, // 使用上面定义的路径别名
        },
        server: {
            port: parseInt(VITE_PORT), // 配置开发服务器的端口
            open: VITE_OPEN !== 'false', // 是否在启动时自动打开浏览器，默认开启
        },
        build: {
            cssCodeSplit: false, // 禁用 CSS 代码分割（可能是为了减少生成的 CSS 文件数量）
            sourcemap: false, // 禁用 sourcemaps 生成，通常在生产环境中禁用以减小构建体积
            outDir: VITE_OUT_DIR, // 设置构建输出目录
            emptyOutDir: true, // 每次构建时清空输出目录
            chunkSizeWarningLimit: 1500, // 设置 chunk 大小警告的阈值（单位：KB）
            rollupOptions: {
                output: {
                    manualChunks: {
                        // 配置分包，指定哪些库要被独立打包
                        vue: ['vue', 'vue-router', 'pinia', 'element-plus', 'tdesign-vue-next'], // 将这些依赖分到一个单独的 `vue.js` chunk 中
                    },
                },
            },
        },
        // 可以添加更多的配置项
    }
}

// 导出 Vite 配置
export default viteConfig
